#include "menubaixo.h"
#include "participante.h"

#include <QPainter>
#include <QGraphicsPixmapItem>
#include <QGraphicsSceneMouseEvent>
#include <QDebug>
#include <QGraphicsScene>

MenuBaixo::MenuBaixo(QGraphicsScene* scene)
{
    scene->addItem(this);
    this->finalizar_alocacao_soldados = new QPushButton(QString::fromUtf8("Finalizar distribuição\nde soldados"));
    this->passar_vez = new QPushButton("Passar a vez");
    proxy_widget = scene->addWidget(this->finalizar_alocacao_soldados);
    proxy_widget->setZValue(1);
    proxy_widget->setParentItem(this);
    proxy_widget->setPos((950 - proxy_widget->widget()->size().width())/2, 30);
    proxy_widget->hide();
    proxy_passar_vez = scene->addWidget(this->passar_vez);
    proxy_passar_vez->setZValue(1);
    proxy_passar_vez->setParentItem(this);
    proxy_passar_vez->setPos((950 - proxy_passar_vez->widget()->size().width())/2, 30);
    proxy_passar_vez->hide();
    this->icone_carta = new QGraphicsPixmapItem(QPixmap(":/mapa/g2452.png"), this);
    this->icone_carta->setPos(850, 20);
    this->icone_objetivo = new QGraphicsPixmapItem(QPixmap(":/mapa/desenho2.png"), this);
    this->icone_objetivo->setPos(790, 20);
    this->icone_carta->hide();
    this->tela_objetivo = new TelaObjetivo();
    this->tropas_nao_alocadas = false;
    connect(this->finalizar_alocacao_soldados, SIGNAL(clicked()), this, SLOT(alocacaoConfirmada()));
    connect(this->tela_objetivo, SIGNAL(botaoChecarClicado()), this, SLOT(checarObjetivo()));
    this->mostrar_objetivo = false;
}

void MenuBaixo::paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);
    painter->setPen(Qt::white);
    painter->setFont(QFont("Arial", 15, 4));
//    painter->drawText(840, 125, 100, 30, Qt::AlignHCenter, "Cartas");
    painter->drawText(780, 125, 100, 30, Qt::AlignHCenter, "Objetivo");
    painter->setFont(QFont("Arial", 26, 4));
    painter->drawText(10, 20, 200, 44,
                      Qt::AlignJustify, this->nome_participante.toUpper());

    painter->setPen(Qt::white);
    painter->setFont(QFont("Arial", 15, 4));

    if (Participante::instance != NULL && Participante::instance->getJogadorAtual() != "")
        painter->drawText(10, 70, 300, 80, Qt::AlignJustify, "Jogador atual: " + Participante::instance->getJogadorAtual());

    if (tropas_nao_alocadas)
        painter->drawText(10, 100, 400, 44, Qt::AlignJustify,
                          "Soldados restantes: " + QString::number(this->tropas_restantes));

}

void MenuBaixo::mostrarBotao()
{
    this->proxy_widget->show();
}

void MenuBaixo::esconderBotao()
{
    this->proxy_widget->hide();
}

void MenuBaixo::mostrarPassarVez()
{
    this->proxy_passar_vez->show();
}

void MenuBaixo::esconderPassarVez()
{
    this->proxy_passar_vez->hide();
}

void MenuBaixo::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    event->accept();
    QRectF pos_icone_carta(this->icone_carta->pos().x(), this->icone_carta->pos().y(),
                           this->icone_carta->boundingRect().width(), this->icone_carta->boundingRect().height());
    QRectF pos_icone_objetivo(this->icone_objetivo->pos().x(), this->icone_objetivo->pos().y(),
                              this->icone_objetivo->boundingRect().width(), this->icone_objetivo->boundingRect().height());
    if (pos_icone_carta.contains(event->pos())) {}

    else if (pos_icone_objetivo.contains(event->pos()) && mostrar_objetivo)
        this->tela_objetivo->show();
}

void MenuBaixo::tropasRecebidas(int novas_tropas)
{
    this->tropas_restantes = novas_tropas;
    this->tropas_nao_alocadas = true;
    this->update();
}

void MenuBaixo::soldadosAlterados(int tropas_alteradas)
{
    this->tropas_restantes = tropas_alteradas;
    this->update();
}

void MenuBaixo::alocacaoConfirmada()
{
    this->tropas_nao_alocadas = false;
    this->update();
}

void MenuBaixo::checarObjetivo()
{
    emit this->mensagemChecarObjetivo("<tipo>vob<nome_jogador>" + Participante::instance->getJogadorAtual());
}
